Estoy creando un juego de mosaicos de piano desde javascript usando lienzo, tengo un caso en el que el usuario tiene que presionar un botón en una ubicación y hora exactas. Tengo que darle al usuario una tolerancia de 100 ms, por lo que si el usuario presionó el botón 100 ms antes o después, todavía cuenta.
Se agradecería una solución.
Los bloques amarillos y azules son los mosaicos, por lo que el usuario debe presionar las teclas en el momento y la ubicación exactos de los mosaicos.
Por lo general, es mejor no mezclar la representación con la lógica subyacente.
Debe representar la tarea (nota que se reproducirá/botón presionado) junto con la hora (o la compensación de tiempo cuando la espera). Luego, una vez que se presiona el botón, compare si la hora actual coincide con la hora esperada.
aquí hay un ejemplo de juguete que puede darte ideas
var startTime = 0; $(document).ready(function(){ $('#butt').on('click', function(){ var curTime = new Date().getTime(); if (startTime === 0) { startTime = new Date().getTime() $('#log').val('Now try pressing it exactly every second') } else { $('#log').val('You were off by ' + (curTime - startTime - 1000)+'ms'); startTime = curTime } }) }) <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button id="butt"> Press me once a second </button> <textarea id='log' rows=10 cols=50>Click button to start</textarea>